/**
 * 文件名：@PropertiesLoaderPlaceholderConfigurer.java <br/>
 * 包名：cn.efunbox.afw.core.environment <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.environment;

import java.io.IOException;
import java.util.List;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

/**
 * 类名：PropertiesLoaderPlaceholderConfigurer  <br />
 *
 * 功能：基于PropertiesLoader的占位符配置器实现
 *
 * @author xtwin <br />
 * 创建时间：2015年12月1日 下午4:40:29  <br />
 * @version 2015年12月1日
 */
public class PropertiesLoaderPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
	
	// 日志记录器
	private static final Log logger = LogFactory.getLog(PropertiesLoaderPlaceholderConfigurer.class);
	
	// 属性加载器列表
	protected List<PropertiesLoader> propertiesLoaders;

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月1日 下午4:41:18<br/>
	 * 
	 * @return
	 * @throws IOException <br/>
	 * @see org.springframework.core.io.support.PropertiesLoaderSupport#mergeProperties()
	 */
	@Override
	protected Properties mergeProperties() throws IOException {
		if (null != propertiesLoaders && ! propertiesLoaders.isEmpty()) {
			try {
				Properties props = new Properties();
				
				for (PropertiesLoader loader : propertiesLoaders) {
					props.putAll(loader.load());
				}
				
				return props;
			} catch (Exception e) {
				logger.error("load properties is error : " + e.getMessage(), e);
				
				throw new IOException(e);
			}
		}
		
		return super.mergeProperties();
	}

	/**
	 * @version 2015年12月1日-下午4:47:39
	 */
	public void setPropertiesLoaders(List<PropertiesLoader> propertiesLoaders) {
		this.propertiesLoaders = propertiesLoaders;
	}
}
